<?php
/**
 * 集合
 * @App	
 * @Group 
 * @Action SetTrait
 * @author lilei
 * @date 2018年5月26日
 *
 */
namespace app\common\redis\traits;
trait SetTrait {
	/**
	 * Redis 操作句柄
	 * @var CacheRedis|Redis
	 */
	public $redis_handle ;
	
	/**
	 * 向名称为key的set中添加元素value,如果value存在，不写入，return false
	 * @param string|number $item
	 * @param string $key
	 */
	public function SetSadd( $item, $key='') {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->sAdd($_key, $item);
		return $res;
	}
	
	/**
	 * 向名称为key的set中批量添加元素
	 * @param array $item
	 * @param string $key
	 */
	public function SetMutiSadd ( array $item, $key='' ){
		$_key = $key ?: $this->key;
		$p[] = $_key;
		foreach ($item as $v){
			$p[] = $v;
		}
		$res = call_user_func_array(array($this->redis_handle, 'sAdd'), $p);
		return $res;
	}
	
	/**
	 * 名称为key的集合中查找是否有value元素，有ture 没有 false
	 * @param string|number $item
	 * @param string $key
	 * @return bool
	 */
	public function SetExistItem( $item, $key='' ) {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->sismember( $key, $item );
		return $res;
	}
	
	/**
	 * 返回名称为key的set的所有元素
	 * @param string $key
	 * @return array
	 */
	public function SetGetAll( $key='' ) {
		$_key = $key ?: $this->key;
		$res = $this->redis_handle->sMembers($_key);
		return $res;
	}
	
	/**
	 * 合并多个集合
	 * @param array $key_list
	 */
	public function SetUnion( array $key_list ) {
		if ( !$key_list ) {
			return array();
		}
		$res = call_user_func_array(array($this->redis_handle, 'sUnion'), $key_list);
		return $res;
	}
	
	/**
	 * 移除集合中一个或多个成员
	 * @param array|string $item_set
	 * @param string $key
	 * @return array
	 */
	public function SetRem( $item_set, $key='' ) {
		$_key = $key ?: $this->key;
		if ( !$item_set ) return [];
		$p[] = $_key;
		if ( is_array($item_set) ) {
			foreach ($item_set as $v){
				$p[] = $v;
			}
		}else {
			$p[] = $item_set;
		}
		$res = call_user_func_array(array($this->redis_handle, 'srem'), $p);
		return $res;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}